package com.dengyuanke.upms.common.result;

import cn.hutool.http.HttpStatus;
import lombok.Data;

import java.io.Serializable;

/**
 * @author dengyuanke
 * 封装返回信息
 */
@Data
public class R<T> implements Serializable {
    private Boolean success;
    private Integer status;
    private String msg;
    private T obj;


    /**
     * 渲染错误数据
     *
     * @return result
     */
    public static <T> R<T> error() {
        R<T> result = new R<T>();
        result.setSuccess(false);
        result.setStatus(HttpStatus.HTTP_INTERNAL_ERROR);
        return result;
    }

    /**
     * 渲染错误数据（带消息）
     *
     * @param msg 需要返回的消息
     * @return result
     */
    public static <T> R<T> error(String msg) {
        R<T> result = error();
        result.setMsg(msg);
        return result;
    }

    /**
     * 渲染成功数据
     *
     * @return result
     */
    public static <T> R<T> success() {
        R<T> result = new R<T>();
        result.setSuccess(true);
        result.setStatus(HttpStatus.HTTP_OK);
        return result;
    }

    /**
     * 渲染成功数据（带信息）
     *
     * @param msg 需要返回的信息
     * @return result
     */
    public static <T> R<T> success(String msg) {
        R<T> result = success();
        result.setMsg(msg);
        return result;
    }

    /**
     * 渲染成功数据（带数据）
     *
     * @param obj 需要返回的对象
     * @return result
     */
    public static <T> R<T> success(T obj) {
        R<T> result = success();
        result.setObj(obj);
        return result;
    }

    /**
     * 渲染失败数据
     *
     * @return result
     */
    public static <T> R<T> fail() {
        R<T> result = new R<T>();
        result.setSuccess(false);
        result.setStatus(HttpStatus.HTTP_OK);
        return result;
    }

    /**
     * 渲染失败数据（带消息）
     *
     * @param msg 需要返回的消息
     * @return result
     */
    public static <T> R<T> fail(String msg) {
        R<T> result = fail();
        result.setMsg(msg);
        return result;
    }

}
